package com.xbongbong.pro.statistic.enums;

import com.xbongbong.i18n.util.I18nMessageUtil;
import com.xbongbong.saas.enums.XbbRefTypeEnum;
import lombok.Getter;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
 * 数值格式
 * @author xinpeng.jiang
 * @version V1.0
 * @date 2021/6/4 10:10
 * @since V1.0
 */
@Getter
public enum NumFormatEnum {
    /**
     * 默认
     */
    DEFAULT(0, "enum.numFormat.name.default", "enum.numFormat.unit.default", ""),
    /**
     * 千
     */
    THOUSAND(1, "enum.numFormat.name.thousand", "enum.numFormat.unit.thousand", "enum.numFormat.noYuanUnit.thousand"),
    /**
     * 万
     */
    TEN_THOUSAND(2, "enum.numFormat.name.tenThousand", "enum.numFormat.unit.tenThousand", "enum.numFormat.noYuanUnit.tenThousand"),
    /**
     * 百万
     */
    MILLION(3, "enum.numFormat.name.million", "enum.numFormat.unit.million", "enum.numFormat.noYuanUnit.million"),
    /**
     * 亿
     */
    HUNDRED_MILLION(4, "enum.numFormat.name.hundredMillion", "enum.numFormat.unit.hundredMillion", "enum.numFormat.noYuanUnit.hundredMillion"),
    /**
     * 防错
     */
    UNKNOWN(404, "", "", "");
    ;

    private final Integer code;

    private final String name;
    /**
     * 单位(带元)
     */
    private final String unit;
    /**
     * 单位(不带元)
     */
    private final String noYuanUnit;

    NumFormatEnum(Integer code, String name, String unit, String noYuanUnit) {
        this.code = code;
        this.name = name;
        this.unit = unit;
        this.noYuanUnit = noYuanUnit;
    }

    public String getUnit() {
        return I18nMessageUtil.getMessage(unit);
    }

    public String getNoYuanUnit() {
        return I18nMessageUtil.getMessage(noYuanUnit);
    }

    /**
     * 通过枚举code获得枚举
     */
    public static NumFormatEnum getByCode(Integer code) {
        if (Objects.isNull(code)) {
            code = DEFAULT.code;
        }
        for (NumFormatEnum cacheCode : values()) {
            if (Objects.equals(cacheCode.getCode(), code)) {
                return cacheCode;
            }
        }
        return UNKNOWN;
    }

    /**
     * 判断首页初始化的系统图表中，需要数值格式的图表
     * @param alias
     * @return
     */
    public static boolean isNeedAmount4Index(String alias) {
        List<String> needAmountList = Arrays.asList(ChartCategoryAliasEnum.OPPORTUNITY.getAlias(), ChartCategoryAliasEnum.QUOTATION.getAlias(), ChartCategoryAliasEnum.CONTRACT.getAlias(),
                ChartCategoryAliasEnum.FUND_MANAGEMENT.getAlias(), ChartCategoryAliasEnum.PURCHASE.getAlias());
        if (!StringUtils.isEmpty(alias) && needAmountList.contains(alias)) {
            return true;
        }
        return false;
    }
}
